﻿using System;
using System.IO;

namespace 面向对象_文件操作
{
    class Program
    {
        static void Main(string[] args)
        {
            //FileInfo Fuke文件，info信息
            string str = @"F:/111/222.txt";
            FileInfo F = new FileInfo(str);
            F.Create();//创建文件
            Console.WriteLine(F.Exists);//判断文件是否存在
            Console.WriteLine(F.Length);//查看文件大小
            Console.WriteLine(F.Name);//查看文件名称
            var tp = new TestPath();
            tp.AboutExtension();
            tp.AboutPath();
            tp.AboutSeparator();
        }
    }
    // Path: 路径，在这里指的是系统文件夹的路径，形如：”F:/111/222.txt“
    class TestPath
    {
       const string path = @"F:/111/222.txt";
        /// <summary>
        /// 关于扩展名 和 文件名
        /// <br>About : 关于；extension:扩展名</br>
        /// </summary>
        public void AboutExtension()
        {
            //Get获得，Extension扩展名
            //1. 获取扩展名： 返回指定路径中包含的扩展名，包括了 点号”.“
            string ge = Path.GetExtension(path);
            Console.WriteLine($"获取扩展名{ge}");
            //2.获取文件名
            //Get获得，File文件，Name名称
            string gf = Path.GetFileName(path);
            Console.WriteLine($"获取文件名为{gf}");
            //3.修改扩展名
            // 只是对路径的字符串进行了修改，不会真的改动到这个路径下的文件
            // change : 改变 Extension扩展名
            var ce = Path.ChangeExtension(path, "exe");
            Console.WriteLine($"修改扩展名为{ce}");
            //4.判断是否包含扩展名
            //Has 是否，有 Extension扩展名
            var he = Path.HasExtension(path);
            Console.WriteLine($"是否包含扩展名{he}");
        }
        /// <summary>
        /// 关于路径
        /// </summary>
        public void AboutPath()
        {
            //Combine拼接，Path.Combine路径拼接
            string cp = Path.Combine(path, "666.exe,777.exe");
            Console.WriteLine($"路径拼接为{cp}");
            //Get获得，Directory目录
            string gd = Path.GetDirectoryName(path);
            Console.WriteLine($"路径的目录为{gd}");
            //Get获得,Filename文件名，Without不包含，Extension扩展名
            //获得文件名但不包含扩展名
           string gf= Path.GetFileNameWithoutExtension(path);
            Console.WriteLine($"获取文件名不包含扩展名{gf}");
            //Full：全部，饱的
            //path：路径
            //获取全部路径
            // 如果 path 没有指定硬盘（路径不完整的时候），返回拼接了程序集所在的路径的路径
            string fp = Path.GetFullPath(path);
            // Environment : 环境 ，Process 程序 ； path ： 路径
            Console.WriteLine($"全部路径为{fp}");
            //root根
            //获取路径根目录
            string pr= Path.GetPathRoot(path);
            Console.WriteLine($"根目录为{pr}");
            //是否有根目录
            //Is:是否
            //path：路径
            //Rooted:根
           var IP= Path.IsPathRooted(path);
            Console.WriteLine($"是否有根目录{IP}");
        }
        /// <summary>
        /// 关于分隔符
        /// <br>separator : 分隔符</br>
        /// </summary>
        public void AboutSeparator()
        {
            // se pa ra tor 
            // 获取分隔符
            char c= Path.PathSeparator;
            Console.WriteLine($"分隔符{c}");
            //获取硬盘分隔符
            // volume : 卷 （体积、音量），磁盘
            char v = Path.VolumeSeparatorChar;
            Console.WriteLine($"磁盘分隔符{v}");
            //获取目录分隔符
            char b = Path.DirectorySeparatorChar;
            Console.WriteLine($"目录分隔符{b}");
            //获取平台的目录分隔符 （MAC、 PC、安卓、ios）
            char ads = Path.AltDirectorySeparatorChar;
            Console.WriteLine($"PC 平台的目录分隔符为：{ads}"); //返回 /

            // Invalid : 不可用 ，无效、失效
            // 用于声明在构成路径时不能使用在路径名中的字符有哪些
            char[] cs = Path.GetInvalidPathChars();
            // 用于声明在构成路径时不能使用在文件名中的字符有哪些
            char[] cfs = Path.GetInvalidFileNameChars();
            foreach (var item in cs)
            {
                int i = Convert.ToInt32(item);
                Console.WriteLine($"无效路径字符 {i} ");
            }

        }
    }

}
